package com.rtzh.learnkotlin.ui

import android.content.IntentFilter
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.rtzh.learnkotlin.broadcastreceiver.ForceReceiverReceiver
import com.rtzh.learnkotlin.uitls.ActivityCollector

open class BaseActivity : AppCompatActivity() {
    lateinit var receiver: ForceReceiverReceiver

    /**
     * onCreate（）activity第一次创建被调用，
     */
    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        ActivityCollector.addActivity(this)
    }

    /**
     * activity不可见变成可见时
     */
    override fun onStart() {
        super.onStart()
    }

    /**
     * activity准备和用户交互时调用，此时的activity一定位于返回栈的栈顶，并且处于运行状态
     */
    override fun onResume() {
        super.onResume()

        //
        val intentFilter = IntentFilter()
        intentFilter.addAction("com.exampl.broadcastbestpractice.FORCE_OFFLINE")
        receiver = ForceReceiverReceiver();
        registerReceiver(receiver, intentFilter)
    }

    /**
     *  这个方法在系统准备曲启动或者恢复另外一个activity的时候调用，我们通常会在这个方法中将一些消耗cpu的资源释放掉，
     *以及保存一些关键数据，这个方法的执行速度一定要快，不然会影响到新的栈顶activity的使用
     */

    override fun onPause() {
        super.onPause()
        unregisterReceiver(receiver)
    }

    /**
     * 这个方法在activity完全不可见的时候调用，
     * 它和onpause方法的主要区别在于，如果启动的新acityty是一个对话框式的activity，那么onpause方法会得到执行，而onstop方法并不会执行
     */
    override fun onStop() {
        super.onStop()
    }

    /**
     * 这个方法在activity被销毁之前调用，之后activity的足昂泰变为销毁状态
     */
    override fun onDestroy() {
        super.onDestroy()
        ActivityCollector.removeActivity(this)
    }

    /**
     * 这个方法在activity由停止状态变为运行状态之前调用，也就是acrivity被重新启动
     */
    override fun onRestart() {
        super.onRestart()
    }
}